//
//  ViewController.m
//  CodeFor链式编程
//
//  Created by relax on 2017/11/16.
//  Copyright © 2017年 relax. All rights reserved.
//

/**
 OC里面，没有参数的方法可以用点来调用。
 这个方法返回一个block，block携带参数，用这个参数去赋值对象的属性。
 于是链式变成的雏形就形成了。
 
 往一个方法的内部传参数可以通过两种方式：
 1. 方法的参数
 2. block返回值。
 
 本质上就是利用block返回值，让用户调用block，传递参数到block内部，在根据block内部逻辑来处理这个参数。
 */



#import "ViewController.h"
#import "Calculator.h"
#import "RLFMDBModel.h"
#import "RLPerson.h"

@interface ViewController ()

@end

@implementation ViewController {
    RLFMDBModel *_db;
    UIAlertController *_alertController;
}

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.

    // 链式变成预热完毕。
//    Calculator *cal = [Calculator new];
//    NSInteger result = cal.sum(10).sub(2).mutil(3).div(4).result;
//    NSLog(@"%zd",result);
//
//    cal.name(@"张三").address(@"湖北省武汉市");
//
//    NSLog(@"%@",cal.introduction);

    // 1. 首先创建数据库文件
    _db = [[RLFMDBModel alloc] initWithDBPath:@"/Users/relax/Desktop" DBfileName:@"temp.sqlite"];

    // 2. 创建表
    [_db createTableName:@"t_gqs" maker:^(RLFMDBMaker * maker) {
        maker.columnName(@"id").integer().primaryKey().autoincrement();
        maker.columnName(@"name").text().notNull();
        maker.columnName(@"data").blob().notNull();

        maker.create();
    }];

    // 3. 插入数据
    [_db insertIntoTableName:@"t_gqs" maker:^(RLFMDBMaker *maker) {
        // 1. 这个maker准备了sql插入语句 INSERT INTO t_gqs (*) VALUES (?)
        // 2. 这个maker引用了db。
        maker.columnName(@"name").values(@"'郭青松'");
        RLPerson *rl = [RLPerson new];
        rl.name = @"李四";
        rl.age = 22;
       // maker.columnName(@"data").values([NSKeyedArchiver archivedDataWithRootObject:rl]);
        maker.columnName(@"data").values(@"'二进制数据存不进去？'");
        maker.insert();
    }];

}

- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event {
//    // 4. 删除数据
//    [_db deleteFromTableName:@"t_gqs" maker:^(RLFMDBMaker *maker) {
//        maker.where(@"id").equalTo(@2);
//        maker.Delete();
//    }];

    // 5. 修改数据
//    [_db updateFromTableName:@"t_gqs" maker:^(RLFMDBMaker *make) {
//        make.set(@"name").assignment(@"'zs'").where(@"id").equalTo(@2);
//        make.update();
//    }];

    // 查询数据
    [_db selectFromTableName:@"t_gqs" maker:^(RLFMDBMaker *make) {
        make.limit(0,10);
        make.select();
    } result:^(FMResultSet *set) {
        while ([set next]) {
            NSInteger id = [set intForColumn:@"id"];
            NSString *name = [set stringForColumn:@"name"];
            NSString *data = [set stringForColumn:@"data"];

            NSLog(@"id:%zd -- name:%@ -- data:%@ --",id,name,data);
        }
    }];
}

- (void)motionBegan:(UIEventSubtype)motion withEvent:(UIEvent *)event {
    _alertController.view.bounds = CGRectMake(0, 0, _alertController.view.bounds.size.width, _alertController.view.bounds.size.height);
}

- (void)recoverBounds {
    _alertController.view.bounds = CGRectMake(0, 0, _alertController.view.bounds.size.width, _alertController.view.bounds.size.height);
}

- (void)viewDidAppear:(BOOL)animated {
    [super viewDidAppear:animated];

//    _alertController = [UIAlertController alertControllerWithTitle:@"标题" message:@"信息" preferredStyle:UIAlertControllerStyleActionSheet];
//
//    // alertController.modalPresentationStyle = UIModalPresentationPageSheet;
//
//    [self presentViewController:_alertController animated:YES completion:nil];
//
//    UIAlertAction *action =  [UIAlertAction actionWithTitle:@"确定" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) {
//
//        // 把bounds还原
//        _alertController.view.bounds = CGRectMake(0, 0, _alertController.view.bounds.size.width, _alertController.view.bounds.size.height);
//        
//
//    }];
//
//    [_alertController addAction:action];
//
//
//    dispatch_async(dispatch_get_main_queue(), ^{
//
//        // bounds.y = 50;
//        CGRect bounds = _alertController.view.bounds;
//        bounds.origin.y = 50;
//        _alertController.view.bounds = bounds;
//    });

}


- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}


@end
